#ifndef CROPPINGSETTINGSFORM_H
#define CROPPINGSETTINGSFORM_H

#include <QWidget>
#include <QRect>

namespace Ui {
class CroppingSettingsForm;
}

class CroppingSettingsForm : public QWidget
{
    Q_OBJECT

public:
    explicit CroppingSettingsForm(QWidget *parent = nullptr);
    ~CroppingSettingsForm();

    /**
     * @brief 设置裁剪区域
     * @param rect 裁剪区域
     */
    void setCropRect(const QRect& rect);

    /**
     * @brief 获取裁剪区域
     * @return 裁剪区域
     */
    QRect cropRect() const;
    
    /**
     * @brief 获取裁剪是否启用
     * @return 裁剪是否启用
     */
    bool isCropEnabled() const;

signals:
    /**
     * @brief 裁剪区域变更信号
     * 当用户更改裁剪区域设置时发出
     * @param rect 新的裁剪区域
     */
    void cropRectChanged(const QRect& rect);
    
    /**
     * @brief 执行实际裁剪信号
     * 当用户点击确定按钮时发出
     */
    void executeActualCrop();

private slots:
    /**
     * @brief 同步按钮点击槽函数
     * 处理用户点击同步按钮的事件
     */
    void on_synchronizeButton_clicked();

    /**
     * @brief 确定按钮点击槽函数
     * 处理用户点击确定按钮的事件
     */
    void on_confirmButton_clicked();
    
    /**
     * @brief 点坐标文本改变槽函数
     * 当任意一个点的坐标文本改变时触发，用于保持矩形
     */
    void onPointTextChanged();

private:
    /**
     * @brief 解析点坐标字符串
     * @param pointStr 坐标字符串，格式为"X,Y"
     * @param x 输出X坐标
     * @param y 输出Y坐标
     * @return 解析成功返回true，失败返回false
     */
    bool parsePoint(const QString& pointStr, int& x, int& y);
    
    /**
     * @brief 根据矩形更新四个点的编辑框
     * @param rect 矩形区域
     */
    void updatePointEditsFromRect(const QRect& rect);

private:
    Ui::CroppingSettingsForm *ui;
    QRect m_cropRect; // 当前裁剪区域
    bool m_enableCrop; // 是否启用裁剪
};

#endif // CROPPINGSETTINGSFORM_H
